希尔伯特曲线
题目 希尔伯特曲线
思路分析
四段代码分别对应4种操作 找规律即可
代码实现
#include <stdio.h>
long long f(int n, int x, int y) {
if (n == 0) return 1;
int m = 1 << (n - 1);
if (x <= m && y <= m) {
return f(n - 1, y, x);//xy调换 于y=x对称左下角
}
if (x > m && y <= m) {
return 3LL * m * m + f(n - 1, m-y+1 , m * 2 - x + 1); // 剩下右下角 于y=-x对称 m-y+1 m*2-x+1是因为要平移
}
if (x <= m && y > m) {
return 1LL * m * m + f(n - 1, x, y - m);//只移动一个 左上角
}
if (x > m && y > m) {
return 2LL * m * m + f(n - 1, x - m, y - m);//xy同时移动 右上角
}
}
int main() {
int n, x, y;
scanf("%d %d %d", &n, &x, &y);
printf("%lld", f(n, x, y));
return 0;
}
💬 评论